import { getEmplyeeBaseInfo, getUserBaseInfo, login } from '@/api/user'
import { getToken, removeToken, setToken } from '@/utils/auth'
// import { Message } from 'element-ui'
export default {
  namespaced: true,
  state: {
    token: getToken(),
    userInfo: {}
  },
  mutations: {
    setToken(state, token) {
      state.token = token
      setToken(token)
    },
    removeToken(state) {
      state.token = null
      removeToken()
    },
    // 定义设置和清除的方法
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
    },
    removeUserInfo(state) {
      state.userInfo = {}
    }
  },
  actions: {
    async login(contest, data) {
      // try {
      //   // 状态码为4xx，前端错误
      //   // 状态码为5xx，后端错误，例如服务器故障了，数据库故障了。。
      //   // 状态码为200，数据当中的 success 来代表错误
      //   // :{}，对象，层层解构，获取对象里面的东西
      //   // :token，变量名，改名称，把获取之后改个变量名
      //   const { data: { success, data: token, message }} = await login(data)
      //   // 判断请求是否成功
      //   if (success) {
      //     contest.commit('setToken', token)
      //     Message.success(message)
      //   } else {
      //     // 在js当中没有办法通过this.$xxx来获取组件的东西
      //     // 提示错误
      //     Message.error(message)
      //   }
      // } catch (error) {
      //   // 处理状态码不为200的错误
      //   Message.error('服务器出错情稍后重试')
      // }
      const token = await login(data)
      contest.commit('setToken', token)
    },
    logout(contest) {
      contest.commit('removeToken')
      // 退出时清空数据
      contest.commit('removeUserInfo')
    },
    async getUserInfo(contest) {
      const u = await getUserBaseInfo()
      const e = await getEmplyeeBaseInfo(u.userId)
      const o = { ...u, ...e }
      // o.staffPhoto = 'http://q6cu3t6jv.bkt.clouddn.com/1063705989926227968?t=1582797590950'
      // 1. 模拟数据,设置null的时候不会触发onerror事件,但是会触发钩子函数update,如果数据最开始就为null,不会触发钩子函数update
      o.staffPhoto = null
      // contest.commit('setUserInfo', { ...u, ...e })
      contest.commit('setUserInfo', o)
      return o // 返回用户信息
    }
  }
}
